XD2: Designing Lesson for Typesystem Teaching

Project

The "concepts of programming language" course provides an introduction to functional programming and programming language theory. What lessons could a follow-up course with more info on programming language theory, modern type systems, and advancend functional programming concepts look like? Attached are some ideas:

lecture 1: first-order languages
  theory
    arithmetic,
    booleans,
    products,
    sums,
    stack vs register languages / SKI / mu calculus 
    pattern matching
    formation / introduction / elimination / eta / beta / commutative rules
    inference rules
    harmony
  lean
    peano numbers
    binary numbers
    equivalence

lecture 2: lambda calculus
  let binding
  - capture avoiding substitution
  - first-order syntax: namefull, nameless
  - (parametric) higher-order syntax

  functions
  - untyped lambda calculus
  - simply typed lambda calculus
  - environment-passing-style evaluation

lecture 3 semantics
  abstract machine
    ...
  relational semantics
    microstep semantics
    smallstep semantics
    bigstep semantics
    equational theory
  function semantics
    definitional interpreter
    denotational semantics
  program logic
    predicate transformer
  logic and compilation
    continuation passing style
    environment passing style

lecture 4
  progress and preservation
  normalization / partial evaluation

lecture 5
  polymoprhism
  parametricity
  free theorems
  dinaturality

lecture 4 effects and coeffects
  linear and uniqueness types
  quantitative type theory

Other inspiration could be the course called "introduction to type systems" that was given a few years ago. We might find together, or I can search for some other good books or courses on the internet, to design inspirations for.

Goals

References

For programming language theory, trying out Lean for some homework/solutions in should be a good idea:

For other tasks things, specific languages with the exact feature that is covered by the topic may be better.